package org.triumphxx.util;

import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.Field;

/**
 * @author:triumphxx
 * @Date: 2024/1/8
 * @Time: 15:12
 * @微信公众号：思考集结处
 * @网站：http://blog.triumphxx.com.cn
 * @GitHub https://github.com/triumphxx
 * @Desc: 对象转换
 **/
@Slf4j
public class ObjectMapper {

    public static void mapProperties(Object sourceObj, Object targetObj) {
        Class<?> sourceClass = sourceObj.getClass(); // 获取源对象的类信息
        Field[] fields = sourceClass.getDeclaredFields(); // 获取所有字段（包括私有）
        for (Field field : fields) {
            String fieldName = field.getName(); // 获取字段名称
            try {
                Field targetField = targetObj.getClass().getDeclaredField(fieldName); // 根据字段名称获取目标对象的相应字段

                if (!targetField.isAccessible()) {
                    targetField.setAccessible(true); // 设置为可访问状态
                }

                Object value = field.get(sourceObj); // 从源对象中获取该字段的值
                targetField.set(targetObj, value); // 将该值设置到目标对象的相应字段上
            } catch (NoSuchFieldException e) {
                continue; // 若目标对象没有与之对应的字段则不进行处理
            }catch (IllegalArgumentException e){
                log.info("1111111111111111");
            }catch (IllegalAccessException e2){
                log.info("2222222222222");
            }
        }
    }
}
